/**
 * 
 */
package fr.gfi.agraf.service;

import java.util.List;

import fr.gfi.agraf.exception.AgrafException;
import fr.gfi.agraf.vue.bean.UtilisateurDTO;

/**
 * @author Zakaria
 *
 */
public interface IUtilisateurService {

	/**
	 * Verifie en base si le mail correspond bien à un utilisateur
	 * 
	 * @param email
	 * 
	 * @return true s'il existe, sinon false
	 */
	boolean traiterDemandeMdpOublie(final String email);

	/**
	 * Recupere un utilisateur qui se connecte
	 * 
	 * @param login
	 * @param password
	 * @return l'utilisateur s'il existe
	 * @throws AgrafException
	 */
	UtilisateurDTO getUtilisateurParIdentification(final String login, final String password)
			throws AgrafException;

	/**
	 * Modifier utilisateur et le retourne
	 * 
	 * @param utilisateurDTO
	 * @throws AgrafException
	 */
	UtilisateurDTO modifierUtilisateur(final UtilisateurDTO utilisateurDTO, boolean fromAdmin)
			throws AgrafException;

	/**
	 * Récupere tous les utilisateurs actifs
	 * 
	 * @return
	 * @throws AgrafException
	 */
	List<UtilisateurDTO> getAllUtilisateurActif() throws AgrafException;

	/**
	 * Récupere tous les utilisateurs inactifs
	 * 
	 * @return
	 * @throws AgrafException
	 */
	List<UtilisateurDTO> getAllUtilisateurInactif() throws AgrafException;

	/**
	 * Supprime un utilisateur avec l'id
	 * 
	 * @param id
	 * @throws AgrafException
	 */
	void supprimerUtilisateur(final Long id, final Long idConnecte) throws AgrafException;

	/**
	 * Ajouter un nouvel utilisateur
	 * 
	 * @param utilisateurDTO
	 * @return
	 * @throws AgrafException
	 */
	void ajouterUtilisateur(final UtilisateurDTO utilisateurDTO) throws AgrafException;

	/**
	 * Met à jour les associations utilisateur profil
	 * 
	 * @param utilisateurDTO
	 * @throws AgrafException
	 */
	void associerUtilisateurProfil(final UtilisateurDTO utilisateurDTO) throws AgrafException;

	/**
	 * Reactive les utilisateurs
	 * 
	 * @param idUtilisateurs
	 * @throws AgrafException
	 */
	void reactiverUtilisateurs(final List<Long> idUtilisateurs) throws AgrafException;
}
